/* eslint valid-jsdoc: "off" */

'use strict';

const path = require('path');


/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = exports = { };

  // 关闭POST请求的csrf约束
  config.security = {
    csrf: {
      enable: false,
    },
  };

  // 用于cookie签名密钥，应改为您自己的并保持安全
  config.keys = appInfo.name + '_1571975369430_1759';

  // 在这里添加您的中间件配置
  config.middleware = [
    'notfoundHandler', // 启用全局404中间件
  ];

  // 在这里添加用户配置
  const userConfig = {
      SWTC:{
        walletFrom:{
          "address": "j91rCu1FbLkBzVmXEtwzeD6j1rPSczW4i1",
          "secret": "spyKtRV26jTsEb3JmBfVUfVYZKnsf",
        },
        walletTo:{
          "address": "jwoHSgdQt7wMQASqAQmswVNxfjbQTTWf6g",
          "secret": "ssNKDxffZ55mHZtZ4szvM619HXSxj",
        },
      },
  };

  // bodyParser中间件配置
  config.bodyParser = {
    jsonLimit: '10mb', // 配置最大请求的JSON大小为10MB
  };

  // 端口号
  config.cluster = {
    listen: {
      port: 7021, // 默认是7001，启动其他配置的时候需要在进行测试
      hostname: '0.0.0.0',
    },
  };

  // 日志相关
  config.logger = {
    dir: path.join(appInfo.root, 'logs', appInfo.name, 'default'),
  };

  // 日志切割配置
  config.logrotator = {
    hourDelimiter: '-', // 使用指定的分隔符按小时旋转文件
    maxFiles: 1000, // 最多的文件数量
    rotateDuration: 60000, // 判断文件是否需要旋转的时间间隔
    maxDays: 31, // 保留最长天数的日志文件，默认为' 31 '。设置' 0 '来保存所有日志
  };

  // 静态文件配置
  config.static = {
    prefix: '/', // 路由
    dir: path.join(appInfo.baseDir, 'app/public'), // 静态文件地址
    dynamic: true, // 是否缓存
    preload: false, // 启动项目开启缓存
    maxAge: 30 * 24 * 60 * 60 * 1000, // 30天
    buffer: true, // 是否缓存到内存
  };

  // 服务器请求通用错误处理
  config.onerror = {
    html(err, ctx) {
      // html hander
      ctx.body = '<h3>服务器内部错误</h3>';
      ctx.status = 500;
    },
    json(err, ctx) {
      // json hander
      ctx.body = { message: '服务器内部错误' };
      ctx.status = 500;
    },
  };

  // 跨域配置
  config.cors = {
    origin: '*',
    allowMethods: 'GET,PUT,POST,DELETE,PATCH',
  };

  // HTTP 通用请求配置,在这里配置超时时间为1分钟
  config.httpclient = {
    request: {
      timeout: 60000,
    },
    httpAgent: {
      timeout: 60000,
    },
    httpsAgent: {
      timeout: 60000,
    },
  };

  // MySql 数据库连接
  config.sequelize = {
    dialect: 'mysql',
    host: '127.0.0.1',
    port: 3306,
    password: '111aaa',
    database: 'db_jingtong_epidemic_demo',
    timezone: '+08:00', // 不启用国际化的时候使用 +8时区，国际化的时候项目需要改为0时区
    logging: false, // 关闭日志
    pool: { // 启用连接池
      max: 100,
      min: 0,
      acquire: 30000,
      idle: 10000,
    },
    freezeTableName: true, // 默认情况下,表名自动复数;使用 freezeTableName:true 参数可以为特定模型停止此行为
    version: true,
  };

  // redis相关配置
  config.redis = {
    client: {
      port: 6379,
      host: '127.0.0.1',
      password: '',
      db: 0,
    },
  };

  // 页面模板引擎相关配置
  config.view = {
    defaultViewEngine: 'nunjucks',
    mapping: {
      '.html': 'nunjucks', // 左边写成.html后缀，会自动渲染.html文件
    },
  };
  
  // 微信公众号相关的配置
  config.wechat_config = {
    token: 'jingtong',
    appid: 'wx5eedf13f5886ad4a',
    encodingAESKey: 'bac6c7f903de556f0759cf970d3a1733'
  };

  return {
    ...config,
    ...userConfig,
  };
};
